package demo1;
//Description:多态
class Shape {
    public void draw() {
        System.out.println("shape");//写了其实对 子类无影响
    }
}
class Rect extends Shape{
    public void draw() {
        System.out.println("♦");
    }
}
class Flower extends Shape{
    @Override
    public void draw() {
        System.out.println("花朵");
    }
}
class Triangle extends Shape{
    @Override
    public void draw() {
        System.out.println("△");
    }
}
public class Test {
    public static void drawMap(Shape shape){
        shape.draw();
    }
    public static void main(String[] args) {//多态  通过一个引用调用同一个方法（对象不同） 表现出不同的形态 一定是向上转型
        /*
        多态的好处 能让类的调用者类型都不必知道 只需要知道对象具有某个方法即可  也就是让封装更进一步 让调用者使用成本降低
         */
        drawMap(new Rect());
        drawMap(new Flower());
        Triangle triangle = new Triangle();
        drawMap(triangle);
        Shape[] shapes = {new Flower(),new Shape(),new Rect(),new Triangle()};
        for (Shape shape: shapes) {
            shape.draw();

        }
    }
    public static void main1(String[] args) {
        Shape shape1 = new Rect();
        shape1.draw();
    }
}
